# coding=utf-8
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from MSB_ERP.utils.base_views import MultipleDestoryMixin

from basic_info.models import Nation, City, Province
from basic_info.serializer.area_serializer import NationSerializer, ProvinceSerializer, CitySerializer


class AreaView(viewsets.ModelViewSet, MultipleDestoryMixin):
    '''
        create:
        国家--新增

        国家新增, status: 201(成功), return: 新增国家信息

        destroy:
        国家--删除

        国家删除, status: 204(成功), return: None

        multiple_delete:
        国家--批量删除,必传参数：ids=[1,2,3,4...]

        国家批量删除, status: 204(成功), return: None

        update:
        国家--修改,只是修改国家名字。

        国家修改, status: 200(成功), return: 修改后的国家信息

        partial_update:
        国家--局部修改,只是修改国家名字。

        国家局部修改, status: 200(成功), return: 修改后的国家信息

        list:
        国家--获取列表

        国家列表信息, status: 200(成功), return: 国家信息列表

        retrieve:
        查询某一个国家

        查询指定ID的国家, status: 200(成功), return: 用户国家
    '''

    queryset = Nation.objects.all()  # 指明该视图集在查询数据时使用的查询集
    serializer_class = NationSerializer  # 序列化（指明该视图在进行序列化或反序列化时使用的序列化器）

class ProvincesView(viewsets.ModelViewSet, MultipleDestoryMixin):
    '''
        create:
        省份--新增

        省份新增, status: 201(成功), return: 新增省份信息

        destroy:
        省份--删除

        省份删除, status: 204(成功), return: None

        multiple_delete:
        省份--批量删除,必传参数：ids=[1,2,3,4...]

        省份批量删除, status: 204(成功), return: None

        update:
        省份--修改,只是修改省份名字。

        省份修改, status: 200(成功), return: 修改后的省份信息

        partial_update:
        省份--局部修改,只是修改省份名字。

        省份局部修改, status: 200(成功), return: 修改后的省份信息

        list:
        省份--获取列表，请求参数nid（国家的ID），如果没有传的话，就返回所有省份的列表，如果传了一个非0的数字的话，就返回该国家对应省份的数据

        省份列表信息, status: 200(成功), return: 省份信息列表

        retrieve:
        查询某一个省份

        查询指定ID的省份, status: 200(成功), return: 用户省份
    '''

    queryset = Province.objects.all()  # 指明该视图集在查询数据时使用的查询集
    serializer_class = ProvinceSerializer  # 序列化（指明该视图在进行序列化或反序列化时使用的序列化器）

    def get_queryset(self):
        # 请求参数nid（国家的ID），如果没有传的话，就返回所有省份的列表，如果传了一个非0的数字的话，就返回该国家对应省份的数据
        nid = self.request.query_params.get('nid', None)
        if nid:
            nid = int(nid)
            return Province.objects.filter(nation__id=nid).all()
        else:
            return Province.objects.all()

class CitysView(viewsets.ModelViewSet, MultipleDestoryMixin):
    '''
        create:
        城市--新增

        城市新增, status: 201(成功), return: 新增城市信息

        destroy:
        城市--删除

        城市删除, status: 204(成功), return: None

        multiple_delete:
        城市--批量删除,必传参数：ids=[1,2,3,4...]

        城市批量删除, status: 204(成功), return: None

        update:
        城市--修改,只是修改城市名字。

        城市修改, status: 200(成功), return: 修改后的城市信息

        partial_update:
        城市--局部修改,只是修改城市名字。

        城市局部修改, status: 200(成功), return: 修改后的城市信息

        list:
        城市--获取列表，请求参数nid（省份的ID），如果没有传的话，就返回所有城市的列表，如果传了一个非0的数字的话，就返回该国家对应城市的数据

        城市列表信息, status: 200(成功), return: 城市信息列表

        retrieve:
        查询某一个城市

        查询指定ID的城市, status: 200(成功), return: 用户城市
    '''

    queryset = City.objects.all()  # 指明该视图集在查询数据时使用的查询集
    serializer_class = CitySerializer  # 序列化（指明该视图在进行序列化或反序列化时使用的序列化器）

    def get_queryset(self):
        # 请求参数pid（国家的ID），如果没有传的话，就返回所有城市的列表，如果传了一个非0的数字的话，就返回该国家对应城市的数据
        pid = self.request.query_params.get('pid', None)
        if pid:
            pid = int(pid)
            return City.objects.filter(province__id=pid).all()
        else:
            return City.objects.all()
